Go训练营第七课问题收集
2021年11月4日 更新
注册
登录
开启更多功能,提升办公效能
微服务服务间通信为什么偏向RPC而不是HTTP?
<减少协议内容,增加传输效率>
一组数据先查缓存,如果没有再从数据库查询。怎么优雅的写出这段代码?
/api目录下,如果是rest接口, 需要放什么内容?
为什么configs用复数,其他都是单数api,test等等
评价一下,依赖注入框架wire、uber/fx该如何选择
我有 10 个 service,20 个 usecase,10 个 repo,都在哪创建呀。我现在都是在 main 函数里创建,再组合起来,这个有点难受。
service看是否相关的,不相关的,都拆分成微服务去处理了。一般都是工具直接生成了service,就放service文件夹里头。 引用大明助教:一般来说,repo会负责从数据源捞到数据,并且组装成entity, value object 和 aggregated,复杂的会额外引入factory, builder来创建这三种对象
工程实践中,Go通常用哪些库进行金融精确计算?
项目中,存储一般都不推荐使用
float,double等。 会带来很多问题。
在main的init中进行全局db等资源申请、和资源清理?资源初始化后对象如何向service、biz、data层传递?
这边db的资源就是在dao层调用,为什么其他层需要呢,这样管理不是很乱吗。像如果你有些值,比如msg里头,需要各各层都需要,那一般都放到context里头,进行传递。而如果是全局数据,一般pkg都会提供register和get等方法。进行获取注册等操作
服务部署要把cmd里面的exe文件分别拿到服务器上面部署吗 还有就是团队协作,比如一个团队搞个服务,要把所有服务代码都弄下来吗
你说的这个,我理解是分支开发的问题,git可以很好的解决。 另外不同服务肯定都是隔离开的,业务不同并行开发处理。 至于依赖的公共库维护好。 公共库升级,业务针对性的升级即可
v2版data层的代码能否举一个复杂点例子看看,有点想象不到
这个得问问毛老师了。应该最近有可能会更新
最近在参考
https://github.com/bxcodec/go-clean-arch
做一些改造,但是有个问题就是跨repo的事务处理比较麻烦,可能存在一个 usecase 依赖多个 repo 的情况,现在就是尽量避免,必须要用的时候用一个 Transaction 方法包一包,老师有什么推荐的解决方案么?
<如果确实存在无法避免的跨服务事务, 需要引入一个分布式事务处理方案,具体的实现方式有两阶段提交、补偿事务、本地消息表等,现阶段还没有特别好的直接拿来用的东西, 还是需要根据分布式事务处理方案去对系统做一些针对性改造。>
如何在公司里组织或者开始大型的项目重构,不断的演进项目架构?如何在不影响开发新功能的情况下,重构项目目录?B站是怎么推进这种工程重构的?希望能获得一些管理上的经验
go2的泛型出来后repo层是不是就可以抽象key和entity公用方法,类似于自增长id或者guid,根据泛型抽象各种通用方法类似于分页
HTTP 服务,对请求参数的校验有没有什么优雅的做法?
如果在monorepo里面,每个grpc的client interface都在不同的api目录里面,那么如果恰巧有两个服务需要相互调用怎么处理?不会环回引用吗?
<A依赖B/api, B依赖A/api, 不会有环回引用>
data层是用于数据结构跟数据库层面的交互处理,对于数据报表统计类的操作,在微服务中怎么样处理的呢?
<对于数据的聚合统计等操作,可以放到job中或task中进行处理。>
层与层之间的数据转换都需要用deepcopy么?deepcopy似乎只能手撸赋值,如果对象字段特别多这种赋值操作会很多,而且DTO、DAO、PO中其实大部分字段可能是一样的,如何比较优雅的处理?
<目前我也没有找到特别好的方法,这是解耦必须要付出的代价。通过go generate去搞可能是一个可行的思路,不过暂时没有找到现成的靠谱的东西。>
monorepo 下多个package main 和多个 func main 会有冲突吗,如何独立编译发布?
给毛老师记的 todo:有没有在需要业务逻辑层处理事务的情况?是否可以直接在 data 层完全做掉?
服务树节点如何组织,业务-服务-子服务,那组织架构是按业务划分的?在资源分配和权限上比组织架构的继承处理起来就会弱吧?这样的取舍重点的思考是什么?